#coding=utf-8

#斐波那契数列
def fib(n:int)->int:
    if n<= 1:
        return n
    else:
        return fib(n-1) + fib(n-2)
# print(fib(7))

#回文判断
def is_palindrome(s:str)->bool:
    if len(s) <= 1:
        return True
    else:
        return s[0] == s[-1] and is_palindrome(s[1:-1])
# print(is_palindrome('level'))

#全排列
#递归
def permutation_rec(s:str)->list:
    lenstr = len(s)
    if lenstr<2:
        return [s]
    else:
        result = []
        for i in range(lenstr):
            ch = s[i]
            rest = s[0:i] + s[i+1:lenstr]
            for j in permutation_rec(rest):
                result.append(ch + j)
        return result
# print(permutation_rec('ABC'))

#循环
def permutation(a : list)->set:
    ans = set()
    if len(a) == 1:
        ans.add(tuple(a))
        return ans
    for i in a:
        y = 1
        temp = []
        re_a = a[:]
        re_a.remove(i)
        for j in re_a:
            temp.append([j])
        while len(temp[0]) != len(a) - 1:
            for j in re_a:
                for k in temp:
                    if j not in k and len(k) == y:
                        for m in range(len(k)+1):
                            q = k[:]
                            q.insert(m,j)
                            temp.append(q)
            for j in temp[::-1]:
                if len(j) == y:
                    temp.remove(j)
            y += 1
        for j in temp:
            for m in range(len(j)+1):
                qq = j[:]
                qq.insert(m,i)
                ans.add(tuple(qq))
    return ans

# a = ['A' , 'B' , 'C']
# print(len(permutation(a)))
# print(permutation(a))



#汉诺塔问题
def hanoi(n,source,target,helper):
    if n == 1:
        moveSingleDesk(source,target)
    else:
        hanoi(n-1,source,helper,target)
        moveSingleDesk(source,target)
        hanoi(n-1,helper,target,source)
def moveSingleDesk(source:tuple,target:tuple)->None:
    disk = source[0].pop()
    print("moving " + str(disk) + " from " + source[1] + " to " + target[1])
    target[0].append(disk)

# A = ([3,2,1],'A')
# B = ([],'B')
# C = ([],'C')
# hanoi(len(A[0]),A,B,C)


#二分字符串
def check(s:str) -> bool:
    flag = 0
    for i in s:
        if i == '1' and flag == 1:
            return False
        elif i == '0':
            flag = 0
        elif i == '1':
            flag = 1
    return True
# N = int(input())
# total_list = []
# for i in range(0 , 2 ** (N) -1):
#     total_list.append(str(bin(i))[2:].rjust(N,'0'))
# for i in total_list[::-1]:
#     if not check(i):
#         total_list.remove(i)
# print(total_list)


#数字和分解
def recursion(k):
    global temp
    if k == 1:  #出口
        for i in range(n-1):
            print(1,"+",end=" ")
        print(1)
        return 0
    if k >= n-k:
        temp = [k,n-k]
        print(f"{temp[0]} + {temp[1]}",end="  ")
        while temp[1] != 1:
            temp[1] -= 1
            temp.append(1)
            for i in range(len(temp)-1):
                print(f"{temp[i]} + ", end="")
            print(temp[len(temp)-1],end="  ")
    elif k < n-k:
        temp = [k] * ((n - k) // k + 1)
        if (n-k) % k == 1:
            temp.append((n-k) % k)
        for i in range(len(temp) - 1):
            print(f"{temp[i]} + ", end="")
        print(temp[len(temp) - 1], end="  ")
        for i in range(len(temp)-1,0,-1):
            while temp[i] != 1:
                temp[i] -= 1
                temp.append(1)
                for i in range(len(temp) - 1):
                    print(f"{temp[i]} + ", end="")
                print(temp[len(temp) - 1],end="  ")
    print()
    print()
    recursion(k-1)
n = int(input())
if n < 1:
    print("None")
else:
    temp = [n]
    for i in range(n-1):
        temp.append(0)
    recursion(n-1)